package com.jsmtr.rms.utils.db;

import java.io.Serializable;
import java.lang.String;
import java.util.ArrayList;
import java.util.HashMap;


/**
 * 虚拟表控制
 *
 * @author 陈宇翔
 */
public class DbTable implements Serializable {
    private static final long serialVersionUID = 1L;
    //定义
    private DbRowCollection drclist = new DbRowCollection();
    private DbColumnCollection dcclist = new DbColumnCollection();
    private static HashMap<String, DbTable> staticDtable = new HashMap<String, DbTable>();
    private int nowRowNum = -1;

//----------------------读

    DbTable(DbRowCollection drc) {
        this.drclist = drc;
        dcclist.set(drclist);
    }

    /**
     * 初始化二维数据网格
     */
    public DbTable() {
    }

    /**
     * 得到当前行指定字段名的数据值
     */
    public String getValue(int ColumnNum) {
        return drclist.get(nowRowNum).get(ColumnNum).toString();
    }

    /**
     * 得到当前行指定字段号的数据值
     */
    public String getValue(String ColumnStr) {
        //	System.out.println(ColumnStr.toUpperCase().replace(" ", ""));
        //return drclist.get(nowRowNum).get(ColumnStr.toUpperCase().replace(" ", "")).toString();
        return drclist.get(nowRowNum).get(ColumnStr.replace(" ", "")).toString();
    }

    /**
     * 得到列长度
     */
    public int getColumnSize() {
        return drclist.length();
    }

    /**
     * 得到列字段名,返回一个ArrayList
     */
    public ArrayList<String> getColumnName() {
        return drclist.colNameList;
    }

    /**
     * 得到指定列索引的列名
     */
    public String getColumnName(int index) {
        return drclist.getColName(index);
    }

    /**
     * 二维数据网格游标从当前的位置向下移一行
     */
    public boolean next() {//从当前的位置向下移一行
        int vtableRowNum = drclist.size();
        if (vtableRowNum != 0) {
            if (nowRowNum < vtableRowNum - 1) {
                nowRowNum++;
                return true;
            }
        }
        return false;
    }

    /**
     * 二维数据网格游标从当前的位置向上移一行
     */
    public boolean previous() {//从当前的位置向上移一行
        if (nowRowNum > 0) {
            nowRowNum--;
            return true;
        }
        return false;
    }

    /**
     * 将二维数据网格游标从当前的位置移到数据表第一行
     */
    public void first() {//移到数据表第一行
        nowRowNum = 0;
    }

    /**
     * 将二维数据网格游标从当前的位置移到数据表到第一行之前
     */
    public void beforeFirst() {//移动数据表到第一行之前
        nowRowNum = -1;
    }

    /**
     * 将二维数据网格游标从当前的位置移到数据表最后一行
     */
    public void last() {//移到数据表最后一行
        nowRowNum = drclist.size() - 1;
    }

    /**
     * 将二维数据网格游标从当前的位置移动到最后一行之后
     */
    public void afterLast() {//移动到最后一行之后
        nowRowNum = drclist.size();
    }

    /**
     * 返回二维数据网格记录总数
     */
    public int recordcount() {//返回记录总数
        return drclist.size();
    }

    /**
     * 给出当前二维数据网格游标所在行数位置
     */
    public int getRow() {
        return nowRowNum;
    }

    /**
     * 设置游标位置
     */
    public boolean setRow(int index) {//设置游标位置
        if (index <= recordcount()) {
            nowRowNum = index;
            return true;
        }
        return false;
    }

    //-----------------jsf

    /**
     * 得到行集合
     */
    public DbRowCollection getRowCollection() {
        return this.drclist;
    }


    public int getRowCount() {
        return this.drclist.size();
    }

    /**
     * 得到列集合
     */
    public DbColumnCollection getColumnCollection() {
        return dcclist;
    }

    /**
     * 得到第0行第0列的值
     */
    public Object getOneValue() {
        if (null == drclist) return 0;
        if (drclist.length() == 0) return 0;
        return drclist.get(0).get(0);
    }

    /**
     * 得到第RowNumindex行，Columnindex列的值
     */
    public Object getOneValue(int RowNumindex, int Columnindex) {
        return drclist.get(RowNumindex).get(Columnindex);
    }

    /**
     * 设置当前虚拟表为全局表
     */
    public void setGlobalTable(String Name) {
        staticDtable.put(Name, this);
    }

    /**
     * 取得一个全局表
     */
    public DbTable getGlobalTable(String Name) {
        return (DbTable) staticDtable.get(Name);
    }

    /**
     * 删除一个全局表
     */
    public void clearGlobalTable(String Name) {
        staticDtable.remove(Name);
    }

}